package com.evildog.workspace.life.application.convert;

import com.evildog.workspace.common.result.PagedResult;
import java.util.List;
import com.evildog.workspace.life.application.vo.AlbumTagPageVO;
import com.evildog.workspace.life.application.vo.AlbumTagListVO;
import com.evildog.workspace.life.application.vo.AlbumTagVO;
import com.evildog.workspace.life.application.dto.AlbumTagPageDTO;
import com.evildog.workspace.life.application.dto.AlbumTagListDTO;
import com.evildog.workspace.life.application.dto.AlbumTagDTO;
import com.evildog.workspace.life.application.model.AlbumTagParam;
import com.evildog.workspace.life.application.model.AlbumTagPageParam;
import com.evildog.workspace.life.application.model.AlbumTagListParam;
import com.evildog.workspace.life.application.bo.AlbumTagBO;
import com.evildog.workspace.life.application.bo.AlbumTagPageBO;
import com.evildog.workspace.life.application.bo.AlbumTagListBO;
import com.evildog.workspace.life.application.entity.AlbumTag;
import com.evildog.workspace.life.application.entity.AlbumTagPageDO;
import com.evildog.workspace.life.application.entity.AlbumTagListDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

@Mapper
public interface AlbumTagConvert {

    AlbumTagConvert INSTANCE = Mappers.getMapper(AlbumTagConvert.class);

    AlbumTagPageDTO convert(AlbumTagPageParam albumTagPageParam);

    AlbumTagListDTO convert(AlbumTagListParam albumTagListParam);

    AlbumTagDTO convert(AlbumTagParam albumTagParam);

    @Mapping(target = "isDeleted", ignore = true)
    AlbumTag convert(AlbumTagDTO albumTagDTO);

    AlbumTagPageDO convert(AlbumTagPageDTO albumTagPageDTO);

    AlbumTagVO convert(AlbumTagBO albumTagBO);

    AlbumTagBO convert(AlbumTag albumTag);

    List<AlbumTagListBO> convert(List<AlbumTagListDO> albumTagList);

    List<AlbumTagListVO> convertVoList(List<AlbumTagListBO> albumTagListBO);

    @Mappings({})
    PagedResult<AlbumTagPageBO> convert(IPage<AlbumTagPageDO> page);

    PagedResult<AlbumTagPageVO> convert(PagedResult<AlbumTagPageBO> page);
}